vscode可以结合mingw 您所在的位置:网站首页 vscode mingw 编译调试 vscode可以结合mingw

vscode可以结合mingw

2023-09-07 04:09| 来源: 网络整理| 查看: 265

该文章翻译自官方教程(有部分修改)

这篇教程教你使用Mingw-w64中的GCC C++编译器(g++)和GDB调试器创建在windows上运行的程序。

配置完vscode,你将编译并调试一个简单的程序来熟悉vscode的界面。读完这篇教程你将能够自己创建并配置你的工作区、在vsocde的文档中进一步探索它的众多特性。不过本教程不会教你有关GCC、Mingw-w64或者c++的知识,因为这些东西在网上有很多可用的优秀资料。

如果你有任何问题,请随时在vscode文档仓库提问。

准备

要想配置成功必须先完成以下步骤:

安装Mingw-w64(安装路径文件不能带有空格,且不要安装在默认路径C:/Program Files/下),本教程中默认它安装在C:\Mingw-w64

将Mingw-w64的bin文件添加到环境变量。

a.在windows设置中搜索编辑账户的环境变量

b.选中Path,点击编辑

c.点击新建,添加Mingw-w64的路径到环境变量中。实际路径取决于你安装的Mingw-w64版本。例如c:\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin

d.点击确定。已经打开的cmd窗口要重启才能让新路径生效。

创建一个工作区

在cmd中创建名为projects的文件夹,用来放你的vscode工程。然后创建一个子文件夹,名为helloworld。定位到这个文件夹,使用vscode打开。命令行如下:

mkdir projects

cd projects

mkdir helloworld

cd helloworld

code .

code .命令用于在vscode中打开当前文件夹,并将这个文件夹作为当前工作区。在编译调试代码之前,得先为vscode配置Mingw-w64。继续完成下方配置步骤后.vscode子文件夹中将存在这些文件:

c_cpp_properties.json (编译器路径和智能提示设置)

tasks.json(编译设置)

launch.json(调试设置)

配置编译器路径

按Ctrl+Shift+P打开命令面板,它长这样:7489fe1c1d8f345283c6b4155ad8a95b.png

输入C/C++然后在底下的列表中选择Edit Configurations (UI)。vscode将会把你的更改写入到.vscode下的c_cpp_properties.json中。19b06f419509b29041e676b84e74d43f.png

找到Complier path设置。vscode会用系统上查找到的编译器路径来填写:优先查找MSVC编译器,其次查找WSL中的g++,最后查找Mingw-w64里的g++。如果你装了VisualStudio或者WSL,那你就得改一下Complier path的路径了。假设你在C:\mingw-w64下装了版本为8.1.0的Mingw-w64(使用Win32线程和结构化异常处理),那么修改路径为C:\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin\g++.exe。这个路径随着安装Mingw-w64时选择的选项的不同而变化。

Complier path在配置文件中尤为重要。vscode插件通过它推断c++标准库的头文件路径,来为你在编写代码时提供许多有用的信息。这叫做IntelliSense(智能提示),在稍后的例子中你将见到它。

设置IntelliSense mode为gcc-x64。

如果你的程序包含的头文件不在工作区或者标准头文件库的路径中,将这个头文件的路径添加到Inlucde path即可。

vscode将这些设置保存在.vscode/c_cpp_properties.json。如果你直接打开它,你会看到类似如下内容(实际内容取决于你的Mingw-w64路径):

{

"configurations": [

{

"name": "Win32",

"includePath": ["${workspaceFolder}/**", "${vcpkgRoot}/x86-windows/include"],

"defines": ["_DEBUG", "UNICODE", "_UNICODE"],

"windowsSdkVersion": "10.0.17763.0",

"compilerPath": "C:\\mingw-w64\\x86_64-8.1.0-win32-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",

"cStandard": "c11",

"cppStandard": "c++17",

"intelliSenseMode": "${default}"

}

],

"version": 4

}

创建编译任务

接下来,创建一个tasks.json文件来告诉vsocde如何编译程序。这个task调用g++编译器根据源代码生成可执行文件。

菜单选择View > Command Palette,键入“task”,选择Tasks: Configure Default Build Task。在下拉列表中选择Create tasks.json file from template,然后选择Others。vscode将生成tasks.json并在编辑区打开。

使用以下片段替换整个文件的内容:

{

"version": "2.0.0",

"tasks": [

{

"label": "build hello world",

"type": "shell",

"command": "g++",

"args": ["-g", "-o", "helloworld", "helloworld.cpp"],

"group": {

"kind": "build",

"isDefault": true

}

}

]

}

command设置声明了要运行的程序(这里是g++.exe),args定义要传递给g++的命令参数,这些参数必须按照编译器期望的顺序来声明。

label的值作为任务名称会显示在vscode的命令面版中,任意值均可。group下的isDefault决定这个任务在按下Ctrl+Shift+B时是否作为默认选项直接执行。这个属性只是为了方便一些,如果设为false,vscode会弹出下拉框让你选择一个任务来执行。

配置调试设置

现在我们配置按下F5时vscode启动GDB所需要的配置文件。

在命令面板中键入“launch”并下拉选择Debug:Open launch.json,然后选择GDB/LLDB。

program是你要调试的可执行文件路径,和你在tasks.json中args定义生成的可执行文件对应。调整miDebuggerPath的值为Mingw-w64中的gdb.exe的路径。

默认的,当stopAtEntry为true时,C++扩展会在main函数的第一行加上断点。设置为false则忽略这个断点。

设置externalConsole为true时,程序输出显示在下方的集成终端中。

launch.json完整文件如下:

{

// Use IntelliSense to learn about possible attributes.

// Hover to view descriptions of existing attributes.

// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387

"version": "0.2.0",

"configurations": [

{

"name": "(gdb) Launch",

"type": "cppdbg",

"request": "launch",

"program": "${workspaceFolder}/helloworld.exe",

"args": [],

"stopAtEntry": true,

"cwd": "${workspaceFolder}",

"environment": [],

"externalConsole": true,

"MIMode": "gdb",

"miDebuggerPath": "C:\\mingw-w64\\x86_64-8.1.0-win32-seh-rt_v6-rev0\\mingw64\\bin\\gdb.exe",

"setupCommands": [

{

"description": "Enable pretty-printing for gdb",

"text": "-enable-pretty-printing",

"ignoreFailures": true

}

]

}

]

}

现在vscode配置Mingw-w64完成。配置仅对当前工作区有效,想要在另一个工作区使用这些配置,把这些Json文件复制到另一个工作区的.vscode子文件夹下,并修改配置中的源文件名和可执行文件名即可。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有